#pragma once

/**
* 导致类臃肿
*/
class IClass {
public:
	~IClass(){}

public:
	void Init() {
		/**
		* 不能写在构造函数中
		* 
		* 在构造函数中调用虚方法为静态绑定
		* 
		* 子类在调用构造函数时会优先调用父类的构造函数
		* 
		* 由于静态绑定, 会执行父类的虚函数, 但由于是纯虚函数, 会导致程序错误
		*/

		this->InitStep1();
		this->InitStep2();
		this->InitStep3();
	}

	virtual void InitStep1() = 0;
	virtual void InitStep2() = 0;
	virtual void InitStep3() = 0;
};